add_libc_integration_test_suite(libc-pthread-integration-tests)

add_integration_test(
  pthread_mutex_test
  SUITE
    libc-pthread-integration-tests
  SRCS
    pthread_mutex_test.cpp
  DEPENDS
    libc.include.pthread
    libc.src.errno.errno
    libc.src.pthread.pthread_mutex_destroy
    libc.src.pthread.pthread_mutex_init
    libc.src.pthread.pthread_mutex_lock
    libc.src.pthread.pthread_mutex_unlock
    libc.src.pthread.pthread_create
    libc.src.pthread.pthread_join
)

add_integration_test(
  pthread_rwlock_test
  SUITE
    libc-pthread-integration-tests
  SRCS
    pthread_rwlock_test.cpp
  DEPENDS
    libc.hdr.time_macros
    libc.hdr.errno_macros
    libc.include.pthread
    libc.src.pthread.pthread_rwlock_destroy
    libc.src.pthread.pthread_rwlock_init
    libc.src.pthread.pthread_rwlock_rdlock
    libc.src.pthread.pthread_rwlock_tryrdlock
    libc.src.pthread.pthread_rwlock_timedrdlock
    libc.src.pthread.pthread_rwlock_clockrdlock
    libc.src.pthread.pthread_rwlock_wrlock
    libc.src.pthread.pthread_rwlock_trywrlock
    libc.src.pthread.pthread_rwlock_timedwrlock
    libc.src.pthread.pthread_rwlock_clockwrlock
    libc.src.pthread.pthread_rwlock_unlock
    libc.src.pthread.pthread_create
    libc.src.pthread.pthread_join
    libc.src.pthread.pthread_rwlockattr_init
    libc.src.pthread.pthread_rwlockattr_destroy
    libc.src.pthread.pthread_rwlockattr_setpshared
    libc.src.pthread.pthread_rwlockattr_setkind_np
    libc.src.__support.threads.linux.raw_mutex
    libc.src.stdio.printf
    libc.src.stdlib.getenv
    libc.src.sys.mman.mmap
    libc.src.sys.mman.munmap
    libc.src.time.clock_gettime
    libc.src.sys.random.getrandom
    libc.src.unistd.fork
    libc.src.sys.wait.waitpid
    libc.src.stdlib.exit
    libc.src.__support.CPP.atomic
    libc.src.__support.CPP.new
    libc.src.__support.threads.sleep
)

add_integration_test(
  pthread_spinlock_test
  SUITE
    libc-pthread-integration-tests
  SRCS
    pthread_spinlock_test.cpp
  DEPENDS
    libc.hdr.errno_macros
    libc.include.pthread
    libc.src.pthread.pthread_spin_init
    libc.src.pthread.pthread_spin_destroy
    libc.src.pthread.pthread_spin_lock
    libc.src.pthread.pthread_spin_trylock
    libc.src.pthread.pthread_spin_unlock
    libc.src.pthread.pthread_create
    libc.src.pthread.pthread_join
)

add_integration_test(
  pthread_test
  SUITE
    libc-pthread-integration-tests
  SRCS
    pthread_test.cpp
  DEPENDS
    libc.include.pthread
    libc.src.pthread.pthread_create
    libc.src.pthread.pthread_join
)

add_integration_test(
  pthread_equal_test
  SUITE
    libc-pthread-integration-tests
  SRCS
    pthread_equal_test.cpp
  DEPENDS
    libc.include.pthread
    libc.src.errno.errno
    libc.src.pthread.pthread_mutex_destroy
    libc.src.pthread.pthread_mutex_init
    libc.src.pthread.pthread_mutex_lock
    libc.src.pthread.pthread_mutex_unlock
    libc.src.pthread.pthread_create
    libc.src.pthread.pthread_equal
    libc.src.pthread.pthread_join
    libc.src.pthread.pthread_self
)

add_integration_test(
  pthread_name_test
  SUITE
    libc-pthread-integration-tests
  SRCS
    pthread_name_test.cpp
  DEPENDS
    libc.include.pthread
    libc.src.errno.errno
    libc.src.pthread.pthread_create
    libc.src.pthread.pthread_getname_np
    libc.src.pthread.pthread_join
    libc.src.pthread.pthread_mutex_destroy
    libc.src.pthread.pthread_mutex_init
    libc.src.pthread.pthread_mutex_lock
    libc.src.pthread.pthread_mutex_unlock
    libc.src.pthread.pthread_self
    libc.src.pthread.pthread_setname_np
)

add_integration_test(
  pthread_exit_test
  SUITE
    libc-pthread-integration-tests
  SRCS
    pthread_exit_test.cpp
  DEPENDS
    libc.include.pthread
    libc.src.pthread.pthread_create
    libc.src.pthread.pthread_exit
    libc.src.pthread.pthread_join
)

add_integration_test(
  pthread_tss_test
  SUITE
    libc-pthread-integration-tests
  SRCS
    pthread_tss_test.cpp
  DEPENDS
    libc.include.pthread
    libc.src.pthread.pthread_create
    libc.src.pthread.pthread_exit
    libc.src.pthread.pthread_join
    libc.src.pthread.pthread_key_create
    libc.src.pthread.pthread_key_delete
    libc.src.pthread.pthread_getspecific
    libc.src.pthread.pthread_setspecific
)

add_integration_test(
  pthread_once_test
  SUITE
    libc-pthread-integration-tests
  SRCS
    pthread_once_test.cpp
  DEPENDS
    libc.include.pthread
    libc.src.pthread.pthread_once
    libc.src.pthread.pthread_mutex_destroy
    libc.src.pthread.pthread_mutex_init
    libc.src.pthread.pthread_mutex_lock
    libc.src.pthread.pthread_mutex_unlock
    libc.src.pthread.pthread_create
    libc.src.pthread.pthread_join
    libc.src.__support.CPP.atomic
)

add_integration_test(
  pthread_join_test
  SUITE
    libc-pthread-integration-tests
  SRCS
    pthread_join_test.cpp
  DEPENDS
    libc.include.pthread
    libc.include.stdio
    libc.src.errno.errno
    libc.src.pthread.pthread_create
    libc.src.pthread.pthread_join
)

add_integration_test(
  pthread_create_test
  SUITE
    libc-pthread-integration-tests
  SRCS
    pthread_create_test.cpp
  DEPENDS
    libc.include.pthread
    libc.src.errno.errno
    libc.src.pthread.pthread_create
    libc.src.pthread.pthread_join
    libc.src.pthread.pthread_attr_getdetachstate
    libc.src.pthread.pthread_attr_getguardsize
    libc.src.pthread.pthread_attr_getstack
    libc.src.pthread.pthread_attr_getstacksize
    libc.src.pthread.pthread_attr_setdetachstate
    libc.src.pthread.pthread_attr_setguardsize
    libc.src.pthread.pthread_attr_setstack
    libc.src.pthread.pthread_attr_setstacksize
    libc.src.pthread.pthread_attr_init
    libc.src.pthread.pthread_attr_destroy
    libc.src.pthread.pthread_self
    libc.src.sys.mman.mmap
    libc.src.sys.mman.munmap
    libc.src.sys.random.getrandom
    libc.src.__support.threads.thread
    libc.src.__support.CPP.atomic
    libc.src.__support.CPP.array
    libc.src.__support.CPP.new
)
